package com.tdam2011.grupo05.ui.activities;

import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.tdam2011.grupo05.R;
import com.tdam2011.grupo05.R.id;
import com.tdam2011.grupo05.R.layout;
import com.tdam2011.grupo05.com.MensajeService;
import com.tdam2011.grupo05.entidades.Contacto;
import com.tdam2011.grupo05.entidades.DatabaseHelper;
import com.tdam2011.grupo05.entidades.Mensaje;

public class ChatActivity extends Activity {

	public static final int ENVIAR_MENSAJE = 1;
	public static final int LEER_MENSAJE = 2;

	private static final String TAG = "ChatActivity";

	private Button _btn_enviar;
	private ListView _lista_chat;
	private EditText _texto_enviar;
	private TextView _to_contacto_titulo;
	private Contacto contacto;
	private ArrayAdapter<String> chatAdapter;
	private StringBuffer out;

	private DatabaseHelper helper;

	private MensajeService mService;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);

		

		setContentView(R.layout.chat_list_activity);

		chatAdapter = new ArrayAdapter<String>(this, R.layout.chat_item);
		_lista_chat = (ListView) findViewById(R.id.lista_chat);
		_lista_chat.setAdapter(chatAdapter);
		_to_contacto_titulo= (TextView) findViewById(R.id.to_contacto_titulo);
		_texto_enviar = (EditText) findViewById(R.id.texto_enviar);

	}

	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		mService = new MensajeService(true,this ,handler);
		helper = new DatabaseHelper(this);

		Intent intent = getIntent();
		
		int idContacto = Integer.parseInt(intent.getStringExtra("selected"));

		contacto = helper.getContacto(idContacto);
		_to_contacto_titulo.setText(contacto.getNombre());
		_texto_enviar
				.setOnEditorActionListener(new TextView.OnEditorActionListener() {

					@Override
					public boolean onEditorAction(TextView v, int actionId,
							KeyEvent event) {
						if (actionId == EditorInfo.IME_NULL
								&& event.getAction() == KeyEvent.ACTION_UP) {
							String mensaje = v.getText().toString();
							Mensaje m = new Mensaje();
							m.setMensaje(mensaje);
							m.setReceptor(contacto);
							m.setFecha(new Date().toString());
							m.setHora(new Date().toString());
							enviarMensaje(m);
						}
						return true;
					}
				});

		_btn_enviar = (Button) findViewById(R.id.btn_enviar);
		_btn_enviar.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				TextView view = (TextView) findViewById(R.id.texto_enviar);
				String mensaje = view.getText().toString();
				Mensaje m = new Mensaje();
				m.setMensaje(mensaje);
				m.setReceptor(contacto);
				m.setFecha(new Date().toString());
				m.setHora(new Date().toString());
				enviarMensaje(m);
			}
		});

		out = new StringBuffer("");

	}

	@Override
	protected synchronized void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i(TAG, "On Resume");
		mService.start();
	}

	@Override
	protected synchronized void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i(TAG, "On Pause");
		if (mService != null) {
			mService.stop();
			mService.setActivo(false);
		}
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i(TAG, "On Stop");
		if (mService != null)
			mService.stop();
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i(TAG, "On Destroyied");
		if (mService != null)
			mService.stop();
	}

	public void enviarMensaje(Mensaje mensaje) {
		if (mensaje.getMensaje().length() > 0) {
			
			out.setLength(0);
			_texto_enviar.setText(out);
			
//			mensaje.setTipoMensaje(Mensaje.TIPO_MENSAJE_SALIENTE);
//			mensaje.setFecha(getTimeStamp());
//			helper.insertMensaje(mensaje);
			mService.enviarMensaje(mensaje);

		} else {
			Toast.makeText(this, "Escriba algo", Toast.LENGTH_LONG).show();
		}

	}

	private final Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {

			Log.i(TAG, "en el handle");
			switch (msg.what) {
			case ENVIAR_MENSAJE:
				Mensaje menOut = (Mensaje) msg.obj;
				chatAdapter.add("Yo: " + menOut.getMensaje());
				break;

			case LEER_MENSAJE:
				Mensaje mensaje = (Mensaje) msg.obj;
				chatAdapter.add(mensaje.getReceptor().getNombre() + ": " + mensaje.getMensaje());

//				mensaje.setReceptor(contacto);
//				mensaje.setTipoMensaje(Mensaje.TIPO_MENSAJE_ENTRANTE);
				
//				helper.insertMensaje(mensaje);
				break;
			}
		}
	};
	
	

}
